var subtract = function(a, b) { return b - a; };
var _ = {}

subFrom20 = partial(subtract, _, 20);
// subFrom20(5);
console.log(subFrom20(5));


function partial(fn) {
    var args = [].slice.call(arguments,1) // [_,20]
    console.log(fn);
    return function() {
        // 找到args里面的 _ ,往其位置上填充arguments(subFrom20的参数)
        var position = 0,len = args.length
    console.log(arguments);
    for (var i = 0;i<len;i++) {
            args[i] = args[i] === _ ?arguments[0] : args[i]
        }
        // args = agrs.concat([].slice.call(arguments))
        return fn.apply(this,args)
    }
}

// function partial(fn) {
//     var args = [].slice.call(arguments, 1) // [ _, 20 ]
//     return function() {
//       // 找到args里面的 _ , 往其位置上填充arguments
//       var len = args.length
//       for (var i = 0; i < len; i++) {
//         // args[i] = args[i] === _ ? arguments[0] : args[i];
//         if (args[i] === _) {
//           args[i] = arguments[0];
//           [].shift.call(arguments)
//         }
//       }
      
//       args = args.concat([].slice.call(arguments)) 
//       console.log(args, '----');
//       return fn.apply(this, args)
//     }
//   }